package dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;

import componentes.Titular;
import dto.DtoTitular;
import gestores.GestorBD;
import gestores.GestorBD;
import gestores.GestorLogin;

/**
 * Clase que se comunica con el dao de la BD para la ejecucion de una consulta SQL
 * 
 * @author Facundo
 *
 */

public class DaoTitular {
	private static DaoTitular INSTANCE = null;
	 
	
	public DaoTitular(){
			
	} 
		
	
	public static DaoTitular getInstance() {
        if (INSTANCE == null) {
        	INSTANCE = new DaoTitular();
        	
        }
        
        return INSTANCE;
    }

	//Metodo que retorna true o flase dependiendo de si existe o no el titular en la BD
	public static boolean existeTitular(Titular titular) throws SQLException {
		boolean bandera = false;
		ResultSet resultado = null;
		String consulta = "SELECT `Tipo_doc`, `Documento` FROM `titulares` WHERE `Tipo_doc`= '"+titular.getTipo_doc()+"' "
				+ "AND `Documento`='"+ titular.getDocumento()+"'";
		
		resultado = DaoBD.getInstance().ejecutar(consulta);
		
		if(resultado.next()){
			bandera = true;
		}
		
		
		return bandera;
		
	}

	//Metodo que guarda un titular en la BD
	public static void guardarTitular(Titular titular) throws SQLException {
		String id_usuario = "1"; 
		Calendar calendario = Calendar.getInstance();
	/*	String fechaHora = ""+calendario.get(Calendar.DATE)+"/"+calendario.get(Calendar.MONTH)
			    +"/"+calendario.get(Calendar.YEAR)+" "+calendario.get(Calendar.HOUR_OF_DAY)
			    +":"+calendario.get(Calendar.MINUTE)+":"+calendario.get(Calendar.SECOND) +"." +calendario.get(Calendar.MILLISECOND);
	  */
		String fechaHora = "2014-11-25 00:00:00.000000";
		String consulta = "INSERT INTO `metodosagiles`.`titulares` (`Apellido`, `Nombres`, `Tipo_doc`, "
				+ "`Documento`, `Fecha_nacimiento`, `Lugar_nacimiento`, `Calle`, `Numero`, `Piso`, `Departamento`, `Pais`, "
				+ "`Provincia`, `Localidad`, `Telefono`, `Telefono_seccional`, `Donante`, `Grupo_sanguineo`, `Factor`, "
				+ "`Id_administrativo`, `Fecha_alta`, `Borrado`) "
				+ "VALUES ('"+titular.getApellido()+"', '"+titular.getNombre()+"', '"+titular.getTipo_doc()+"', '"+titular.getDocumento()+"', "
				+ "'"+titular.getFecha_nacimiento()+"', '"+titular.getLugar_nacimiento()+"', '"+titular.getCalle()+"','"+titular.getNumero()+"','"+titular.getPiso()+"','"+titular.getDepartamento()+"', "
				+ "'"+titular.getPais()+"', '"+titular.getProvincia()+"', '"+titular.getLocalidad()+"', '"+titular.getTelefono()+"', '"+titular.getTelefono_seccional()+"', "
				+ "'"+titular.getDonante()+"', '"+titular.getGrupo_sanguineo()+"', '"+titular.getFactor()+"', '"+id_usuario+"', '"+fechaHora+"', '0')";
		
		DaoBD.getInstance().actualizar(consulta);
		
	}


	public static ArrayList<Titular> buscarTitularDNI(String tipoDNI, String dni) {
		// TODO Auto-generated method stub
		ArrayList<Titular> lista = new ArrayList<Titular>();
		ResultSet resultado = null;
		String consulta ="SELECT * FROM titulares WHERE tipo_doc='"+tipoDNI+"' and documento='"+dni+"'";
		try {
			resultado = DaoBD.getInstance().ejecutar(consulta);
			while (resultado.next()){ 
			Titular titular= new Titular();
	 	    titular.setApellido(resultado.getString("apellido"));
	 	    titular.setNombre(resultado.getString("nombres"));
	 	    titular.setTipo_doc(resultado.getString("tipo_doc"));
	 	    titular.setDocumento(resultado.getInt("documento"));
	 	    titular.setFecha_nacimiento(resultado.getString("fecha_nacimiento"));
	 	    titular.setLugar_nacimiento(resultado.getString("lugar_nacimiento"));
	 	    titular.setCalle(resultado.getString("calle"));
	 	    titular.setNumero(resultado.getInt("numero"));
			titular.setPiso(resultado.getString("piso"));
			titular.setDepartamento(resultado.getString("departamento"));
	 	    titular.setPais(resultado.getString("pais"));
	 	    titular.setProvincia(resultado.getString("provincia"));
	 	    titular.setLocalidad(resultado.getString("localidad"));
	 	    titular.setTelefono(resultado.getString("telefono"));
	 	    titular.setTelefono_seccional(resultado.getString("telefono_seccional"));
	 	    titular.setGrupo_sanguineo(resultado.getString("grupo_sanguineo"));
	 	    titular.setFactor(resultado.getString("factor"));
	 	    titular.setEdad();
	 	   lista.add(titular);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return lista;
	}


	public static ArrayList<Titular> buscarTitularNombreApellido(String nombre,
			String apellido) {
		// TODO Auto-generated method stub
		ArrayList<Titular> lista = new ArrayList<Titular>();
		ResultSet resultado = null;
		String consulta ="SELECT * FROM titulares WHERE apellido='"+apellido+"' and nombre='"+nombre+"'";
		try {
			resultado = DaoBD.getInstance().ejecutar(consulta);
			while (resultado.next()){ 
			Titular titular= new Titular();
	 	    titular.setApellido(resultado.getString("apellido"));
	 	    titular.setNombre(resultado.getString("nombres"));
	 	    titular.setTipo_doc(resultado.getString("tipo_doc"));
	 	    titular.setDocumento(resultado.getInt("documento"));
	 	    titular.setFecha_nacimiento(resultado.getString("fecha_nacimiento"));
	 	    titular.setLugar_nacimiento(resultado.getString("lugar_nacimiento"));
	 	    titular.setCalle(resultado.getString("calle"));
	 	    titular.setNumero(resultado.getInt("numero"));
			titular.setPiso(resultado.getString("piso"));
			titular.setDepartamento(resultado.getString("departamento"));
	 	    titular.setPais(resultado.getString("pais"));
	 	    titular.setProvincia(resultado.getString("provincia"));
	 	    titular.setLocalidad(resultado.getString("localidad"));
	 	    titular.setTelefono(resultado.getString("telefono"));
	 	    titular.setTelefono_seccional(resultado.getString("telefono_seccional"));
	 	    titular.setGrupo_sanguineo(resultado.getString("grupo_sanguineo"));
	 	    titular.setFactor(resultado.getString("factor"));
	 	    titular.setEdad();
	 	   lista.add(titular);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}		
		return lista;
	}


	public static ArrayList<Titular> buscarTitulares() {
		// TODO Auto-generated method stub
		ArrayList<Titular> lista = new ArrayList<Titular>();
		ResultSet resultado = null;
		String consulta ="SELECT * FROM titulares";
		try {
			resultado = DaoBD.getInstance().ejecutar(consulta);
			while (resultado.next()){ 
			Titular titular= new Titular();
	 	    titular.setApellido(resultado.getString("apellido"));
	 	    titular.setNombre(resultado.getString("nombres"));
	 	    titular.setTipo_doc(resultado.getString("tipo_doc"));
	 	    titular.setDocumento(resultado.getInt("documento"));
	 	    titular.setFecha_nacimiento(resultado.getString("fecha_nacimiento"));
	 	    titular.setLugar_nacimiento(resultado.getString("lugar_nacimiento"));
	 	    titular.setCalle(resultado.getString("calle"));
	 	    titular.setNumero(resultado.getInt("numero"));
			titular.setPiso(resultado.getString("piso"));
			titular.setDepartamento(resultado.getString("departamento"));
	 	    titular.setPais(resultado.getString("pais"));
	 	    titular.setProvincia(resultado.getString("provincia"));
	 	    titular.setLocalidad(resultado.getString("localidad"));
	 	    titular.setTelefono(resultado.getString("telefono"));
	 	    titular.setTelefono_seccional(resultado.getString("telefono_seccional"));
	 	    titular.setGrupo_sanguineo(resultado.getString("grupo_sanguineo"));
	 	    titular.setFactor(resultado.getString("factor"));
	 	    titular.setEdad();
			lista.add(titular);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}		
		return lista;
	}


	public static ArrayList<Titular> buscarTitularApellido(String apellido) {
		// TODO Auto-generated method stub
		ArrayList<Titular> lista = new ArrayList<Titular>();
		ResultSet resultado = null;
		String consulta ="SELECT * FROM titulares WHERE apellido='"+apellido+"'";
		try {
			resultado = DaoBD.getInstance().ejecutar(consulta);
			while (resultado.next()){ 
			Titular titular= new Titular();
	 	    titular.setApellido(resultado.getString("apellido"));
	 	    titular.setNombre(resultado.getString("nombres"));
	 	    titular.setTipo_doc(resultado.getString("tipo_doc"));
	 	    titular.setDocumento(resultado.getInt("documento"));
	 	    titular.setFecha_nacimiento(resultado.getString("fecha_nacimiento"));
	 	    titular.setLugar_nacimiento(resultado.getString("lugar_nacimiento"));
	 	    titular.setCalle(resultado.getString("calle"));
	 	    titular.setNumero(resultado.getInt("numero"));
			titular.setPiso(resultado.getString("piso"));
			titular.setDepartamento(resultado.getString("departamento"));
	 	    titular.setPais(resultado.getString("pais"));
	 	    titular.setProvincia(resultado.getString("provincia"));
	 	    titular.setLocalidad(resultado.getString("localidad"));
	 	    titular.setTelefono(resultado.getString("telefono"));
	 	    titular.setTelefono_seccional(resultado.getString("telefono_seccional"));
	 	    titular.setGrupo_sanguineo(resultado.getString("grupo_sanguineo"));
	 	    titular.setFactor(resultado.getString("factor"));
	 	    titular.setEdad();
	 	   lista.add(titular);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}		
		return lista;
	}


	public Titular buscarTitular(String numero_documento) {
		ResultSet resultado = null;
		Titular titular;
		String consulta ="SELECT * FROM titulares WHERE documento='"+numero_documento+"'";
		resultado = GestorBD.getInstance().ejecutar(consulta);
		titular= new Titular();
 	    try {
 	    	if(resultado.next()){
				titular.setApellido(resultado.getString("apellido"));
				titular.setNombre(resultado.getString("nombres"));
				titular.setTipo_doc(resultado.getString("tipo_doc"));
				titular.setDocumento(resultado.getInt("documento"));
				titular.setFecha_nacimiento(resultado.getString("fecha_nacimiento"));
				titular.setLugar_nacimiento(resultado.getString("lugar_nacimiento"));
				titular.setCalle(resultado.getString("calle"));
				titular.setNumero(resultado.getInt("numero"));
				titular.setPiso(resultado.getString("piso"));
				titular.setDepartamento(resultado.getString("departamento"));
				titular.setPais(resultado.getString("pais"));
				titular.setProvincia(resultado.getString("provincia"));
				titular.setLocalidad(resultado.getString("localidad"));
				titular.setTelefono(resultado.getString("telefono"));
				titular.setTelefono_seccional(resultado.getString("telefono_seccional"));
				titular.setGrupo_sanguineo(resultado.getString("grupo_sanguineo"));
				titular.setFactor(resultado.getString("factor"));
				titular.setEdad(); 
 	    	}
 	   } catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
 	    return titular;
	}


	


	
}
